package com.eternal.base.data.source;

import com.clj.fastble.data.BleDevice;
import com.eternal.base.concat.*;
import com.eternal.base.database.entity.Device;
import com.eternal.base.database.entity.Notification;
import com.eternal.base.exception.BleException;

import java.util.List;

import io.reactivex.Flowable;

/**
 * Created by Administrator
 * On 2020/4/24
 * Description:
 *
 * @author Administrator
 */
public interface IDeviceSource {

    /**
     * 从数据库中获取设备
     *
     * @return 设备
     */
    Flowable<List<DeviceInfo>> getInfo();

    List<DeviceInfo> getPortInfo(String mac);

    byte getType(String mac);

    List<String> getAllMac();

    /**
     * 根据mac删除设备
     *
     * @param mac
     */
    void deleteDevice(String mac);

    /**
     * 添加设备
     *
     * @param device
     */
    void addDevice(com.eternal.base.database.entity.Device device);

    /**
     * 保存设置信息
     *
     * @param mac      mac
     * @param settings 设置信息
     */
    void setSettings(String mac, byte port, DeviceSetting settings);

    /**
     * 获取设备信息
     *
     * @param mac mac
     * @return 设备信息
     */
    DeviceSetting getSetting(String mac, byte port);

    /**
     * 设置设备连接时间
     *
     * @param mac  mac
     * @param time 时间
     */
    void setTime(String mac, long time);

    /**
     * 设置控制页面显示类型
     *
     * @param mac              mac
     * @param controlTypeByHum 控制页面是否是湿度  true湿度  false 温度
     */
    void setControlTypeByHum(String mac, byte port, boolean controlTypeByHum);

    /**
     * @param mac
     */
    boolean isDegree(String mac);

    /**
     * @param mac
     */
    DeviceModel getModel(String mac, byte port);

    Flowable<DeviceName> getDeviceName(String mac, byte port);

    /**
     * @param mac
     */
    DeviceModelInfo getModelInfo(String mac);

    void setDeviceModel(String mac, byte port, DeviceModel model);

    void setModelData(String mac, DeviceModel model);

    void setDeviceInfo(String mac, DeviceInfo model);

    void setPortInfo(String mac, PortInfo model);

    void initNotification(String mac, byte port, List<Notification> data);

    DeviceIndex connect(Device device);
}